#!/bin/bash
#第五天学习内容：while 循环与条件控制
#在我们已经了解了如何使用for循环来遍历列表或序列之后，
#今天我们将学习另一种类型的循环结构：while循环。
#与for循环不同，while循环会持续执行一段代码块，直到给定的条件不再满足为止。
#while [ condition ]
#do
#    # 执行代码块
#done
#这里的condition是一个逻辑表达式，只要这个表达式的值为真（即返回状态码0），循环就会一直执行。

#示例脚本：简单的计数器
#下面的例子展示了一个基本的while循环，它用来计算从1到5的数字，并将它们打印出来。
counter=1
while [ $counter -le 5 ]
do
    echo "$counter"
    ((counter++))
done
echo "Finished counting."
#在这个脚本中，我们首先初始化一个变量counter为1。
#然后，我们进入一个while循环，该循环将持续执行，直到counter的值大于5。
#每次循环迭代时，都会打印当前的counter值，然后递增它。

#示例：读取文件直到遇到特定行
#假设你有一个文本文件，并希望读取该文件的内容直到遇到包含特定字符串的行。
#我们可以使用while循环结合read命令来实现这一点。
input="sample_5.sh.txt"
search_string="openssl"
line_count=0
match_count=0

while IFS= read -r line
do
    ((line_count++))
    if [[ "$line" == *"$search_string"* ]]; then
        ((match_count++))
        echo "第 $match_count 次匹配: '$search_string' 在第 $line_count 行"
    fi
done < "$input"

if [ $match_count -eq 0 ]; then
    echo "未找到字符串 '$search_string'"
else
    echo "共找到 $match_count 次匹配"
    echo "文件总行数: $line_count"
fi
#在这个例子中，我们定义了一个名为input的变量，它指向我们要读取的文件。
#我们还定义了一个search_string变量，表示我们要查找的字符串。
#while循环会逐行读取文件内容，并检查每一行是否包含搜索字符串。
#如果找到了匹配项，就输出一条消息并退出循环。

#练习:
#修改上述脚本，让它不仅能在找到特定字符串时退出，还能统计在此之前读取了多少行。